<?php
/**
 * Classe model da tabela Cobranca
 * @filesource
 * @author			Marcos Rodrigo
 * @copyright		Copyright 2009 M2R
 * @package			broffices
 * @subpackage		broffices.application.models
 * @version			1.0
*/
class Cobranca extends Zend_Db_Table_Abstract
{
	protected $_name = "tbl_cobranca";
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function busca($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();

		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);	
		}
		/*foreach ($where as $coluna=>$valor)
		{
			if(is_array($valor))
			{
				foreach ($valor as $coluna2=>$valor2)
				{
					$slct->where($coluna2." ?", $valor2);
				}
			}else{
				$slct->where($coluna." ?", $valor);	
			}
		}*/

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}

	/**
	 * Retorna registros do banco de dados montando parametros especialmente para comparar um parametro
	 * com um ou varios parametros por meio da query IN ou NOT IN
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 *
	 * @version 1.0 - original
	 */ 
	public function buscaINouNotIN($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->distinct();
		
		//$slct->from(array("c"=>"tbl_contavoip"));
		
		/*$slct->from($this, 
							array("contrato_id"=>"contrato_id",
								  "documento_id"=>"documento_id"));*/
		
		
		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
            if(!empty($valor)){
                $slct->where($coluna, $valor);
            }
		}
		
		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		//xd($slct->query());
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function buscaCobrancaExtrato($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);

		$slct->from(array("c"=>"tbl_cobranca"),array("id"=>"c.id",
													"extrato_id"=>"c.extrato_id",
													"vhr_ano_mes_referencia"=>"c.vhr_ano_mes_referencia",
													"flt_valor"=>"c.flt_valor",
													/*"flt_valorpago"=>"c.flt_valorpago",*/
													"dte_geracao"=>"c.dte_geracao",
													"dte_vencimento"=>"c.dte_vencimento",
													/*"dte_pagamento"=>"c.dte_pagamento",*/
													"int_nossonumero"=>"c.int_nossonumero",
													"bln_pago"=>"c.bln_pago",
													"bln_ativocobranca"=>"c.bln_ativo"));
		 
		$slct->joinInner(array("e"=>"tbl_extrato"), 
										"c.extrato_id = e.id",
										array(
										"extrato_id"=>"e.id", 
										"contrato_id"=>"e.contrato_id",  	
										"vhr_numextrato"=>"e.vhr_numextrato",
										"dte_emissao"=>"e.dte_emissao",
										"flt_valor_extrato"=>"e.flt_valor_extrato",
										"vhr_ano_mes_referencia"=>"e.vhr_ano_mes_referencia",
										"vhr_nomearquivo"=>"e.vhr_nomearquivo",
										"bln_ativoextrato"=>"e.bln_ativo"));
		 
		 
		$slct->joinInner(array("ct"=>"tbl_contrato"), 
										"e.contrato_id = ct.id",
						array("id_contrato"=>"ct.id"));
		
		$slct->joinInner(array("p"=>"tbl_pessoa"), 
										"ct.pessoa_id = p.id",
						array("vhr_nome"=>"p.vhr_nome"));

		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);	
		}
		/*foreach ($where as $coluna=>$valor)
		{
			if(is_array($valor))
			{
				foreach ($valor as $coluna2=>$valor2)
				{
					$slct->where($coluna2." ?", $valor2);
				}
			}else{
				$slct->where($coluna." ?", $valor);	
			}
		}*/

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	

	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function buscaCobrancaExtratoINouNotIN($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);

		$slct->from(array("c"=>"tbl_cobranca"),array("id"=>"c.id",
													"extrato_id"=>"c.extrato_id",
													"vhr_ano_mes_referencia"=>"c.vhr_ano_mes_referencia",
													"flt_valor"=>"c.flt_valor",
													/*"flt_valorpago"=>"c.flt_valorpago",*/
													"dte_geracao"=>"c.dte_geracao",
													"dte_vencimento"=>"c.dte_vencimento",
													/*"dte_pagamento"=>"c.dte_pagamento",*/
													"int_nossonumero"=>"c.int_nossonumero",
													"bln_pago"=>"c.bln_pago",
													"bln_ativocobranca"=>"c.bln_ativo"));
		 
		$slct->joinInner(array("e"=>"tbl_extrato"), 
										"c.extrato_id = e.id",
										array(
										"extrato_id"=>"e.id", 
										"contrato_id"=>"e.contrato_id",  	
										"vhr_numextrato"=>"e.vhr_numextrato",
										"dte_emissao"=>"e.dte_emissao",
										"flt_valor_extrato"=>"e.flt_valor_extrato",
										"vhr_ano_mes_referencia"=>"e.vhr_ano_mes_referencia",
										"vhr_nomearquivo"=>"e.vhr_nomearquivo",
										"bln_ativoextrato"=>"e.bln_ativo"));
		 
		 
		$slct->joinInner(array("ct"=>"tbl_contrato"), 
										"e.contrato_id = ct.id",
						array("id_contrato"=>"ct.id"));
		
		$slct->joinInner(array("p"=>"tbl_pessoa"), 
										"ct.pessoa_id = p.id",
						array("vhr_nome"=>"p.vhr_nome"));

		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna, $valor);	
		}

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	
	/**
	 * apaga um registro da tabela
	 * @param int $codigo - codigo do registro para apagar
	 * @return void
	 */
	public function apaga($codigo)
	{
		$row = $this->find($codigo)->current();
		$row->bln_ativo = 0;
		$row->save();
//		$where = $this->getAdapter()->quoteInto('id = ?', $codigo);
//		$this->delete($where);
	}
	
	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotal($where=array())
	{
		$slct = $this->select();
		
		$slct->from(array("c"=>"tbl_cobranca"), array("COUNT(c.id) as total"));
		
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}
		
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}
	
	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotalCobrancaExtrato($where=array())
	{
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);

		$slct->from(array("c"=>"tbl_cobranca"),array("COUNT(c.id) as total"));
		 
		$slct->joinInner(array("e"=>"tbl_extrato"), 
										"c.extrato_id = e.id",
										array(
										"extrato_id"=>"e.id", 
										"contrato_id"=>"e.contrato_id",  	
										"vhr_numextrato"=>"e.vhr_numextrato",
										"dte_emissao"=>"e.dte_emissao",
										"flt_valor_extrato"=>"e.flt_valor_extrato",
										"vhr_ano_mes_referencia"=>"e.vhr_ano_mes_referencia",
										"vhr_nomearquivo"=>"e.vhr_nomearquivo",
										"bln_ativoextrato"=>"e.bln_ativo"));
		 
		$slct->joinInner(array("ct"=>"tbl_contrato"), 
										"e.contrato_id = ct.id",
						array("id_contrato"=>"ct.id"));
		
		$slct->joinInner(array("p"=>"tbl_pessoa"), 
										"ct.pessoa_id = p.id",
						array("vhr_nome"=>"p.vhr_nome"));
		
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}
		
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}
	

	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotalCobrancaExtratoINouNotIN($where=array())
	{
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);

		$slct->from(array("c"=>"tbl_cobranca"),array("COUNT(c.id) as total"));
		 
		$slct->joinInner(array("e"=>"tbl_extrato"), 
										"c.extrato_id = e.id",
										array(
										"extrato_id"=>"e.id", 
										"contrato_id"=>"e.contrato_id",  	
										"vhr_numextrato"=>"e.vhr_numextrato",
										"dte_emissao"=>"e.dte_emissao",
										"flt_valor_extrato"=>"e.flt_valor_extrato",
										"vhr_ano_mes_referencia"=>"e.vhr_ano_mes_referencia",
										"vhr_nomearquivo"=>"e.vhr_nomearquivo",
										"bln_ativoextrato"=>"e.bln_ativo"));
		 
		$slct->joinInner(array("ct"=>"tbl_contrato"), 
										"e.contrato_id = ct.id",
						array("id_contrato"=>"ct.id"));
		
		$slct->joinInner(array("p"=>"tbl_pessoa"), 
										"ct.pessoa_id = p.id",
						array("vhr_nome"=>"p.vhr_nome"));
		
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna, $valor);
		}
		
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}
}
